package br.edu.ifce.mflj.controller;

import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;

import br.edu.ifce.mflj.comunicacao.Pacote;
import br.edu.ifce.mflj.conectividade.ICanalDeComunicacao;
import br.edu.ifce.mflj.dados.Usuario;
import br.edu.ifce.mflj.observer.ChatListener;
import br.edu.ifce.mflj.observer.UsuarioListener;

public class DamasOnlineControlador implements IControlador {

	private ICanalDeComunicacao	canalDeComunicacao;
	private Usuario				usuario;

	/**
	 * @return the canalDeComunicacao
	 */
	public ICanalDeComunicacao getCanalDeComunicacao() {
		return canalDeComunicacao;
	}

	/**
	 * @param canalDeComunicacao the canalDeComunicacao to set
	 */
	public void setCanalDeComunicacao(ICanalDeComunicacao canalDeComunicacao) {
		this.canalDeComunicacao = canalDeComunicacao;
	}

	@Override
	public void transmitirPacote( Pacote pacote ){
		this.canalDeComunicacao.enviarPacote( pacote );
	}

	@Override
	public void addChatListener( ChatListener chatListener ){
		this.canalDeComunicacao.addChatListener( chatListener );
	}

	@Override
	public void removeChatListener(ChatListener chatListener) {
		this.canalDeComunicacao.removeChatListener( chatListener );
	}

	@Override
	public void addMouseListener( MouseListener mouseListener ) {
		this.canalDeComunicacao.addMouseListener( mouseListener );
	}

	@Override
	public void removeMouseListener( MouseListener mouseListener ) {
		this.canalDeComunicacao.removeMouseListener( mouseListener );
	}

	@Override
	public void addMouseMotionListener( MouseMotionListener mouseMotionListener ){
		this.canalDeComunicacao.addMouseMotionListener( mouseMotionListener );
	}

	@Override
	public void removeMouseMotionListener( MouseMotionListener mouseMotionListener ){
		this.canalDeComunicacao.removeMouseMotionListener( mouseMotionListener );
	}

	@Override
	public void addUsuarioListener(UsuarioListener usuarioListener) {
		this.canalDeComunicacao.addUsuarioListener( usuarioListener );
	}

	@Override
	public void removeUsuarioListener(UsuarioListener usuarioListener) {
		this.canalDeComunicacao.removeUsuarioListener( usuarioListener );
	}

	@Override
	public void iniciarCanal( Usuario usuario ) {
		this.usuario = usuario;
		new Thread( this ).start();
	}

	@Override
	public String getIdentificadorCanalDeSaida() {
		return this.canalDeComunicacao.getIdentificador();
	}

	@Override
	public void run() {
		canalDeComunicacao.iniciarComunicacao( this.usuario );
	}
}
